package com.xunan.boot.controller;

import com.xunan.boot.service.COSFilesService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * 腾讯云cos接口的基础操作
 * 参考文档： https://cloud.tencent.com/document/product/436/10199#.E5.88.9B.E5.BB.BA.E5.AD.98.E5.82.A8.E6.A1.B6
 *
 * @author xn
 * @date 2022/6/20 15:23
 */
@RestController
public class FileController {

    @Resource
    private COSFilesService cosFilesService;

    /**
     * 上传文件到腾讯云
     *
     * @param file 文件
     * @return 该文件位于COS上的路径
     */
    @PostMapping("/cos/file/fileUpload")
    public String fileUpload(MultipartFile file) {
        System.out.println(file);
        //该文件位于COS上的路径
        String url = cosFilesService.fileUpload(file);
        return url;
    }

    /**
     * 查询存储桶中对象列表
     *
     * @param PrefixPath 腾讯云COS对应桶下某个文件夹
     */
    @GetMapping("/cos/file/selectFiles")
    public void selectFiles(String PrefixPath) {
        cosFilesService.selectFiles(PrefixPath);
    }

    /**
     * 下载文件
     * 参考文档：https://cloud.tencent.com/document/product/436/65937#.E4.B8.8B.E8.BD.BD.E5.AF.B9.E8.B1.A12  的最后
     *
     * @param COSKey 指定文件在 COS 上的路径，即对象键。例如对象键为folder/picture.jpg，则表示下载的文件 picture.jpg 在 folder 路径下
     * @return 下载链接
     */
    @PostMapping("/cos/file/downloadFile")
    public String downloadFile(String COSKey) {
        String downloadUrl = cosFilesService.downloadFile(COSKey);
        return downloadUrl;
    }

    /**
     * 删除文件
     *
     * @param COSKey 指定文件在 COS 上的路径，即对象键。例如对象键为folder/picture.jpg，则表示下载的文件 picture.jpg 在 folder 路径下
     * @return 是否成功
     */
    @PostMapping("/cos/file/deleteFile")
    public Boolean deleteFile(String COSKey) {
        Boolean result = cosFilesService.deleteFile(COSKey);
        return result;
    }
}

